import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' // jsx 插件
// import tsx from "./plugin/index" // 自定义 tsx 插件
import AutoImport from 'unplugin-auto-import/vite' // 自动导入插件
import { PostCssPxToViewport } from "./src/components/H5适配/plugins/postcss-px-to-viewport" // px 转换插件
// import { visualizer } from 'rollup-plugin-visualizer' // 打包性能分析插件
import { VitePWA } from 'vite-plugin-pwa' // 网页离线缓存插件（自己的项目要配置）

// https://vitejs.dev/config/
export default ({ mode }) => {

  // console.log('环境变量：', loadEnv(mode, process.cwd()));

  return defineConfig({
    plugins: [
      vue({
        template: {
          compilerOptions: {
            isCustomElement: tag => tag.includes('wyn-') // 只要是 wyn- 开头的，都会跳过组件的监测，会把它识别成 customElement 元素。
          }
        }
      }),
      vueJsx(),
      // tsx(),
      AutoImport({
        imports: ['vue', 'vue-router'],
        dts: 'src/auto-import.d.ts'
      }),
      // visualizer({ open: true }),
      VitePWA({
        workbox: {
          cacheId: "WYN", // 缓存标识
          runtimeCaching: [
            {
              urlPattern: /.*\.js.*/, // 缓存文件
              handler: "StaleWhileRevalidate", // 重新验证时失效
              options: {
                cacheName: "WYN-js", // 缓存 js 名称
                expiration: {
                  maxEntries: 30, // 缓存文件数量 LRU 算法
                  maxAgeSeconds: 30 * 24 * 60 * 60 // 缓存时间
                }
              }
            }
          ]
        }
      })
    ],
    css: {
      postcss: {
        plugins: [
          PostCssPxToViewport()
        ]
      },
      preprocessorOptions: {
        scss: {
          additionalData: "@import './src/components/BEM架构/bem.scss';" // 全局引入 scss
        }
      }
    },
    // vite 打包性能优化配置（自己的项目要配置）
    build: {
      chunkSizeWarningLimit: 2000, // 打包文件大小超过 2000 时提示
      cssCodeSplit: true, // 对 CSS 进行拆分
      sourcemap: false, // 关闭生成 sourcemap
      minify: "terser", // esbuild 打包快 terser 打包体积小
      assetsInlineLimit: 4000, // 静态资源文件小于 4000 的大小时会被转成 base64
    }
  })
}
